var express = require('express')
var router = express.Router()

const jwt = require('jsonwebtoken')
const moment = require('moment')
const AccountModel = require('../../models/AccountModel')
// 导入中间件
let checkTokenMiddleware = require('../../middlewares/checkTokenMiddle')

//记账本的列表
router.get('/account', checkTokenMiddleware, async function (req, res, next) {
  try {
    // 获取所有账单信息
    const accounts = await AccountModel.find().sort({ time: -1 }).exec()
    res.json({
      code: '0000',
      msg: '获取成功',
      data: accounts,
    })
  } catch (err) {
    res.json({
      code: '1001',
      msg: '读取失败',
      data: null,
    })
  }
})

// 新增记录
router.post('/account', checkTokenMiddleware, (req, res) => {
  // 表单验证

  // 插入数据库
  AccountModel.create({
    ...req.body,
    // 修改 time 属性的值
    time: moment(req.body.time).toDate(),
  })
    .then((data) => {
      res.json({
        code: '0000',
        msg: '创建成功',
        data: data,
      })
    })
    .catch((err) => {
      res.json({
        code: '1002',
        msg: '创建失败~~',
        data: null,
      })
    })
})

//删除记录
router.delete('/account/:id', checkTokenMiddleware, async (req, res) => {
  try {
    const id = req.params.id
    const data = await AccountModel.deleteOne({ _id: id })

    if (data.deletedCount > 0) {
      res.json({
        code: '0000',
        msg: '删除成功',
        data: {},
      })
    }
  } catch (err) {
    res.json({
      code: '1003',
      msg: '删除失败',
      data: null,
    })
  }
})
//获取单个账单信息
router.get('/account/:id', checkTokenMiddleware, (req, res) => {
  // 获取 id 参数
  let { id } = req.params

  // 查询数据库
  AccountModel.findById(id)
    .then((data) => {
      if (data) {
        res.json({
          code: '0000',
          msg: '读取成功',
          data: data,
        })
      } else {
        res.json({
          code: '1004',
          msg: '读取失败~~',
          data: null,
        })
      }
    })
    .catch((err) => {
      res.json({
        code: '1004',
        msg: '读取失败~~',
        data: null,
      })
    })
})

//更新单个账单
router.patch('/account/:id', checkTokenMiddleware, (req, res) => {
  // 获取 id 参数值
  let { id } = req.params

  // 更新数据库
  AccountModel.updateOne({ _id: id }, req.body)
    .then((updateResult) => {
      if (updateResult.nModified === 0) {
        return res.json({
          code: '1005',
          msg: '没有进行修改',
          data: null,
        })
      }
      // 再次查询数据库获取单条数据
      return AccountModel.findById(id)
    })
    .then((data) => {
      if (!data) {
        return res.json({
          code: '1004',
          msg: '读取失败~~',
          data: null,
        })
      }
      // 成功响应
      res.json({
        code: '0000',
        msg: '更新成功',
        data: data,
      })
    })
    .catch((err) => {
      res.json({
        code: '1005',
        msg: '更新失败~~',
        data: null,
      })
    })
})

module.exports = router
